/*******************************************************************************
 * Copyright (c) 2011 Olexandr V. Shaposhnikov.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Olexandr V. Shaposhnikov - initial API and implementation and/or initial documentation
 *******************************************************************************/
package com.funkyroach.use.core.ast;

import org.eclipse.dltk.ast.ASTVisitor;
import org.eclipse.dltk.ast.declarations.Argument;
import org.eclipse.dltk.ast.declarations.MethodDeclaration;
import org.eclipse.dltk.ast.references.TypeReference;

import com.funkyroach.use.core.parser.USToken;

public class USFuncDeclaration extends MethodDeclaration implements USIScope {

	private TypeReference returnType;

	public USFuncDeclaration(USToken tkId) {
		super(tkId.getText(), tkId.getStartOffset(), tkId.getEndOffset(), 0, 0);
	}

	@Override
	public int getKind() {
		return IUSASTConstants.US_AST_FUNC_DECL;
	}

	@Override
	protected void traverseChildNodes(ASTVisitor visitor) throws Exception {
		if (returnType != null) {
			visitor.visit(returnType);
		}

		super.traverseChildNodes(visitor);
	}

	public void setReturnType(TypeReference returnType) {
		this.returnType = returnType;
	}

	public Argument getArgument(final String name) {
		for (Object arg : arguments) {
			if (arg instanceof Argument) {
				Argument argument = (Argument) arg;
				if (argument.getName().equalsIgnoreCase(name)) {
					return argument;
				}

			}
		}
		return null;
	}

}